/**
 * 系统权限管理 菜单 js
 */
var common = {};

//初始化 权限列表数据，  菜单列表数据
common.init = function(){
	$.ajax({
    	url: server.url + '/manage/permission/list',
    	type:'post',
    	data:{},
    	dataType:'json',
    	async:false,
    	success:function(data){
    		// 1- 初始化系统权限列表
    		var systemPermissionListContent = '<ol class="dd-list">';
    		$.each(data.permissionList,function(index, item){
    			systemPermissionListContent += '<li class="dd-item dd2-item" data-id="' + index + '">';
    				systemPermissionListContent += '<div class="dd-handle dd2-handle">' + (index + 1) + '</div>';
    				//<span class="label label-warning pull-right cursor-hand" onclick="server.deleteObject(\''+item.id+'\',\'/manage/userGroup/delete\',common.init,null)"><i class="fa fa-trash"></i>删除</span><span class="label label-success pull-right cursor-hand" onclick="server.openModalBox(\'/manage/userGroup/edit/' + item.id + '/1\',\'编辑\',400);"><i class="fa fa-edit"></i>修改</span>
    				systemPermissionListContent += '<div class="dd2-content"><a href="javascript:void(0);" onclick="javascript:common.switchMenuCheckStatusBySystemPermission(\''+item.id+'\',this);">' + item.groupName + '</a></div>';
    			systemPermissionListContent += '</li>';
    			
    		});	
    		systemPermissionListContent += '</ol>';
    		// 1-1 列表数据
    		$('.div-all-system-permission').html(systemPermissionListContent);
    		// 1-2 数据总数
    		
    		// 2- 初始化 菜单列表数据
    		$('.div-matched-menu').html(common.createMultiLevelMenu(data.systemMenuList));
    		
    		// 3- 将convertIdToName类样式的标签中的userId替换为用户名
    	//	server.dataReady();
    		
    		// 4-初始化所有checkbox标签
    	//	$('input[type="checkbox"]').uCheck();
    		
    	},
    	error:function(){
    		server.alert('获取菜单数据操作发生错误, 请刷新页面重新尝试或者联系管理员进行解决.');
    	}
    });
}
// 循环创建多级菜单
common.createMultiLevelMenu = function(dataList){
	if(dataList.length > 0){
		var menuListContent = '<ol class="dd-list">';
		$.each(dataList,function(index, item){
			var itemName = item.menuName;
			if(item.type == "1"){
				itemName = itemName + "--系统菜单";
			}else if(item.type == "2"){
				itemName = itemName + "--服务机构菜单";
			}
			menuListContent += '<li class="dd-item dd2-item" data-id="'+ (index) + '">';
			menuListContent += '<div class="dd-handle dd2-handle"><label><input type="checkbox" value="' + item.id + '" onclick="common.switchMenuCheckStatusByChoosenCheckBox(this);" class="colored-blue"><span class="text"></span></label></div>';
			menuListContent += '<div class="dd2-content"><input type="checkbox" class="colored-blue" checked="checked">' + itemName + '</div>';
			if(item.childMenu.length > 0){
				menuListContent += common.createMultiLevelMenu(item.childMenu);
			}
			menuListContent += '</li>';
		});
		menuListContent += '</ol>';
		return menuListContent;
	}else{
		return null;
	}
}

//  默认没有被选中的权限按钮样式, 被选中的权限按钮样式, 
var btnDefaultSystemPermission = 'btnDefaultSystemPermission',btnCheckedSystemPermission = 'btnCheckedSystemPermission';
// 点击权限, 显示对应的菜单, 
common.switchMenuCheckStatusBySystemPermission = function(permissionTypeId,obj) {
	// 将保存菜单按钮  先激活
	$('#btnSaveSystemPermissionMenu').removeAttr('disabled');
	// 取消所有菜单的选中状态
	$('.div-matched-menu input:checkbox').prop('checked',false)
	$('#permissionTypeId').val(permissionTypeId);
	// 1- 根据权限读取本身的菜单
	$.ajax({
    	url: server.url + '/manage/permission/getMenuByUserGroup',
    	type:'post',
    	data:{userGroupId:permissionTypeId},
    	dataType:'json',
    	async:false,
    	success:function(data){
    		// 2- 循环所有菜单复选框, 判定每一个复选框的状态
    		$('.div-matched-menu input:checkbox').each(function(){
    			var currentMenu = $(this);
    			$.each(data.entity,function(index, item){
    				if(item.menuId == $(currentMenu).val()){
    					$(currentMenu).prop('checked',true);
    				}
	    		});	
    		});
    		// 4- 本选中项样式加深, 其余兄弟项颜色变浅
    		$(obj).parent().parent().siblings().children('.dd2-content').removeClass(btnCheckedSystemPermission).addClass(btnDefaultSystemPermission);
    		$(obj).parent().removeClass(btnDefaultSystemPermission).addClass(btnCheckedSystemPermission);
    	},
    	error:function(){
    		server.alert('获取菜单数据操作发生错误, 请刷新页面重新尝试或者联系管理员进行解决.');
    	}
    });
};

//异步 系统权限对应的菜单, obj 为当前点击对象
common.updateSystemPermissionMenu = function(obj){
	// 校验按钮是否可用
	if($(obj).attr('disabled') == 'disabled'){
		return false;
	}
	// 1- 校验方法
	var params = common.checkBatch();
	if(params == null){
		return;
	}
	// 2- 异步提交
	$.ajax({
    	url: server.url + '/manage/permission/assignMenu',
    	type:'post',
    	data:{
    		userGroupId:params.userGroupId,
    		menuIds:params.menuIds
    	},
    	traditional:true,
    	dataType:'json',
    	beforeSend: function(){
    	},
    	success:function(data){
    		if(data.notice== true){
    			server.alertSuccess(data.message);
    		}
    	},
    	error:function(){
    		server.alert('操作发生错误, 请刷新页面重新尝试或者联系管理员进行解决.');
    	}
    });
}

//校验数据方法-验证当前有无被选中的菜单, 如果没有, 则返回false
common.checkBatch = function(){
	var params = {};
	var permissionTypeId = $('#permissionTypeId').val();	//permissionTypeId
	if(verify.isNull(permissionTypeId)){
		server.alert('请先选择对应的用户组.');
		return null;
	}
	// 已经勾选的菜单数量
	var checkedbox = $('.div-matched-menu li').children().children().children('input:checkbox:checked');
	if($(checkedbox).length < 1){
		server.alert('请选择菜单项.');
		return null;
	}
	params.userGroupId = permissionTypeId;
	var codeArray = new Array();
	$(checkedbox).each(function(){
		codeArray.push($(this).val());
	});
	params.menuIds = codeArray;
	return params;
}

/**
 * 点击菜单复选框 来更改复选框状态, 同时也更改子级或父级的复选框选中状态
 * 选中后：
 * 		所有下级子菜单选中状态跟随本菜单选中状态
 * 		父级菜单 
 */ 
common.switchMenuCheckStatusByChoosenCheckBox = function(obj){
	var currentCheckStatus = $(obj).prop('checked');	// 当前选中框 勾选状态
	// 1- 处理子菜单 下级所有复选框随本复选框而改变状态
	$(obj).parent().parent().parent().find('input:checkbox').prop('checked',currentCheckStatus);
	// 2- 处理父菜单，改变父菜单选中状态
	common.switchParentCheckStatus(obj);
}

// 检查同级菜单, 然后根据是否全选/全部选 而 改变父菜单 选中状况, 在common.switchMenuCheckStatusByChoosenCheckBox中使用
common.switchParentCheckStatus = function(obj){
	// 同级菜单数量
	var sameLevelNum = $(obj).parent().parent().parent().parent().children().children().children().children('input:checkbox').length;
	// 同级菜单已经被选中数量
	var checkedSameLevelNum = $(obj).parent().parent().parent().parent().children().children().children().children('input:checkbox:checked').length;
	// 父级复选框
	var parentCheckbox = $(obj).parent().parent().parent().parent().siblings().first().children().children('input:checkbox');
	
	//当子级菜单有选中，则父级菜单跟着你选中
	if(checkedSameLevelNum != 0){
		$(parentCheckbox).prop('checked',true);
	}else{
		$(parentCheckbox).prop('checked',false);
	}
	
	// 如果向上第五层包裹的不是 div(.div-matched-menu)  则执行：common.switchParentCheckStatus(obj) 
	var up5tagName = $(obj).parent().parent().parent().parent().parent().prop('tagName');
	if(up5tagName != 'DIV'){
		common.switchParentCheckStatus(parentCheckbox);
	}
	// 点击到二级菜单
	// 查询 本二级菜单 同级的 已经被勾选的数量
/*	var checkedSecondLevelMenuNum = $(obj).parent().parent().parent().children('li').find('input:checkbox:checked').length;
	if(checkedSecondLevelMenuNum > 0 ){
		$(obj).parent().parent().parent().children('label').find('input:checkbox').prop('checked',true);
	}else{
		$(obj).parent().parent().parent().children('label').find('input:checkbox').prop('checked',false);
	}*/
}

// 新增/编辑  form表单提交时的 参数校验
common.check = function(param){
	var params = {};
	var permissionTypeName = $('#permissionTypeName').val();
	if(verify.isNull(permissionTypeName)){
		alert('系统权限名不能为空.');
		$('#permissionTypeName').focus();
		return null;
	}
	params.permissionTypeName = permissionTypeName;
	return params;
}
